package cn.wolfcode.crm.contorller;

import cn.wolfcode.crm.domain.ArticleItem;
import cn.wolfcode.crm.domain.InMsgEntity;
import cn.wolfcode.crm.domain.OutMsgEntity;
import cn.wolfcode.crm.util.Sha1Util;
import cn.wolfcode.crm.util.WeChatUtil;
import org.springframework.web.bind.annotation.*;

import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Date;

@RestController
public class WeChatController {
    /**
     * URL接入校验
     * @return
     */
    @GetMapping("weChat")
    public String validate(String signature,String timestamp,String nonce,String echostr) throws NoSuchAlgorithmException { // 加密签名 时间戳 随机数 随机字符串
        // 将token、timestamp、nonce三个参数进行字典序排序
        String[] array = {WeChatUtil.TOKEN,timestamp,nonce};
        Arrays.sort(array);
        // 将三个参数字符串拼接成一个字符串进行sha1加密
        StringBuilder builder = new StringBuilder();
        for (String item : array) {
            builder.append(item);
        }
        String MySignature = Sha1Util.sha1(builder.toString());
        // 开发者获得加密后的字符串可与signature对比，标识该请求来源于微信
        if (MySignature.equals(signature)){
            System.out.println("验证成功");
            return echostr;
        }else {
            System.out.println("验证失败");
        }
        return null;
    }

    /**
     * 消息处理
     * @return
     */
    @PostMapping("weChat")
    public Object handleMessage(@RequestBody InMsgEntity inMsgEntity){
        OutMsgEntity outMsgEntity = new OutMsgEntity();
        // 发送方
        outMsgEntity.setFromUserName(inMsgEntity.getToUserName());
        // 接收方
        outMsgEntity.setToUserName(inMsgEntity.getFromUserName());
        // 创建消息时间
        outMsgEntity.setCreateTime(new Date().getTime());
        // 判断消息的类型
        String msgType = inMsgEntity.getMsgType();
        // 设置消息内容
        String outContent = null;
        if (msgType.equals("text")){
            // 文本消息
            outMsgEntity.setMsgType("text");
            // 接收用户消息
            String content = inMsgEntity.getContent();
            if (content.contains("开学")){
                outContent = "广州校区：计算机网络技术开学时间于2022年2月16号\n" +
                        "清远校区：软件工程专业的开学时间于2022年2月17号";
            }else if(content.contains("地址")){
                outContent = "广州校区：广东省广州市白云区均禾街道石马村广花二路638号\n" +
                        "清远校区：清远市清城区东城街道环城东路38号";
            }else {
                outContent = content;
            }
            outMsgEntity.setContent(outContent);
        }else if(msgType.equals("image")){
            // 图片消息
            outMsgEntity.setMsgType("image");
            // 设置消息信息
            outMsgEntity.setMediaId(new String[]{inMsgEntity.getMediaId()});
        }else if(msgType.equals("event")){
            // 关注事件
            // 判断是关注还是取关
            if (inMsgEntity.getEvent().equals("subscribe")){
                // 回复文本消息
                // outMsgEntity.setMsgType("text");
                // outMsgEntity.setContent("欢迎您的关注！[旺柴]");
                // 回复图文消息
                outMsgEntity.setMsgType("news");
                outMsgEntity.setArticleCount(1);
                ArticleItem item = new ArticleItem();
                item.setTitle("java学科");          // 标题
                item.setDescription("Java风靡全球20+年，"+"“编程语言一哥”当之无愧");    // 描述
                item.setPicUrl("https://www.wolfcode.cn/assets/website/home/img/entity-course/icon-java.png");         // 图片地址
                item.setUrl("https://www.wolfcode.cn/java.html");            // 文章地址
                outMsgEntity.setItem(new ArticleItem[]{item});
            }else if (inMsgEntity.getEvent().equals("CLICK")){
                String eventKey = inMsgEntity.getEventKey();
                if ("classinfo".equals(eventKey)){
                    outContent = "广州校区：计算机网络技术开学时间于2022年2月16号\n" +
                            "清远校区：软件工程专业的开学时间于2022年2月17号";
                }else if ("address".equals(eventKey)){
                    outContent = "广州校区：广东省广州市白云区均禾街道石马村广花二路638号\n" +
                            "清远校区：清远市清城区东城街道环城东路38号";
                }
                outMsgEntity.setContent(outContent);
                outMsgEntity.setMsgType("text");
            }
        }
        return outMsgEntity;
    }
}
